package com.woniu.controller;


import com.woniu.util.OssFile;
import com.woniu.util.QiNiuUploadUtils;
import com.woniu.util.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

/**
 * 图片上传的问题:
 * <p>
 * 1、oss 服务器问题
 * 空间管理\空间需要设置为公开的
 * <p>
 * 2、服务器问题
 * 外连接域名写错了(http 未写\ 连接错误)
 * <p>
 * 3、前端的图片不展示
 * image获取src错误, data 至需要一次就可以
 * <p>
 * 跨域问题：
 * url:http://localhost:8080/user /list
 * 协议://ip:端口/资源
 * 如果协议、ip、端口不一致就会出现跨域问题
 * <p>
 * 解决:
 * 前端:
 * 配置代理 可以接跨域问题
 * <p>
 * 后端:
 * 1、局部处理
 * 使用这个@CrossOrigin注解 用在controller 上面、可以解决当前的controller的跨域问题
 * <p>
 * 2、全局处理:
 * 1、实现WebMvcConfigurer 配置、重写addCorsMappings添加跨域的方法
 * 2、通过过滤器来实现\跨域问题
 */
@RestController
@RequestMapping("/upload")
@Api(tags = "文件上传")
public class UploadController extends BaseController {

    @Autowired
    private QiNiuUploadUtils qiNiuUploadUtils;
    @Autowired
    RedisTemplate redisTemplate;


    @ApiOperation("文件上传")
    @PostMapping("/upload")
    public Result upload(@RequestPart MultipartFile file) throws IOException {

        //1.wq.jpg改成  唯一的.图片的后缀

        String originalFilename = file.getOriginalFilename();
        // 2. 重新设置文件的名称
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");

        // 文件的名称 = uuid + 源文件的后缀
        String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
        String fileName = uuid + substring;
        // 3. 调用图片上传的工具类
//        String url = qiNiuUploadUtils.uploadFile(file.getBytes(), fileName);

        String url = OssFile.uploadOss(file.getBytes(), fileName);

        String redisfileName= url.substring(url.lastIndexOf("/") + 1);
        System.out.println(redisfileName);

        //将每一个上传的图片加到redis-->all中
        redisTemplate.opsForSet().add("redis_all_upload_image",redisfileName);

        // 4. 响应数据d
        return toDataResult(url);
    }

    @ApiOperation("删除青牛云图片")
    @GetMapping("/delete")
    public Result delete(String fileName) {
        qiNiuUploadUtils.deleteFile(fileName);
        return success();
    }

    @ApiOperation("删除阿里云图片")
    @GetMapping("/delete/aliyun")
    public Result delete2(String fileName) throws Exception {
        OssFile.deleteFile(fileName);
        return success();
    }






}
